package cdu.sl.service;

import cdu.sl.domain.dto.CardStudyRecordDTO;
import cdu.sl.domain.dto.FlashcardUpdateDTO;
import cdu.sl.domain.dto.StudySetCreateDTO;
import cdu.sl.domain.dto.StudySetUpdateDTO;
import cdu.sl.domain.vo.StudySetVO;

import java.util.List;

/**
 * 学习集服务接口
 */
public interface StudySetService {

    /**
     * 创建学习集
     * @param studySetCreateDTO 创建学习集DTO
     * @return 创建的学习集
     */
    StudySetVO createStudySet(StudySetCreateDTO studySetCreateDTO);

    /**
     * 根据ID获取学习集详情
     * @param id 学习集ID
     * @return 学习集详情
     */
    StudySetVO getStudySetById(Long id);
    
    /**
     * 修改学习集
     * @param studySetUpdateDTO 修改学习集DTO
     * @return 修改后的学习集
     */
    StudySetVO updateStudySet(StudySetUpdateDTO studySetUpdateDTO);
    
    /**
     * 更新学习集的访问时间
     * @param id 学习集ID
     */
    void updateAccessTime(Long id);
    
    /**
     * 获取当前用户访问的所有学习集
     * 前端可以根据lastAccessTime自行判断过滤
     * @return 学习集列表
     */
    List<StudySetVO> getAllAccessedStudySets();
    
    /**
     * 删除学习集
     * @param id 学习集ID
     */
    void deleteStudySet(Long id);

    /**
     * 获取当前用户创建的学习集
     * @return 学习集列表
     */
    List<StudySetVO> getMyStudySets();

    /**
     * 获取热门学习集列表
     * @return 热门学习集列表
     */
    List<StudySetVO> getHotStudySets();

    /**
     * 对单词卡学习进行进度跟踪
     * @param cardStudyRecordDTO 更新单词卡学习进度数据传输对象
     */
    void progressChecking(CardStudyRecordDTO cardStudyRecordDTO);
}
